47 research outputs found
A Verified Type System for CakeML
CakeML is a dialect of the (strongly typed) ML family of programming
languages, designed to play a central role in high-assurance
software systems. To date, the main artefact supporting this is a verified
compiler from CakeML source code to x86-64 machine code.
The verification effort addresses each phase of compilation from
parsing through to code generation and garbage collection.
In this paper, we focus on the type system: its declarative speci-
fication, type soundness theorem, and the soundness and completeness
of an implementation of type inference – all formally veri-
fied in the HOL4 proof assistant. Each of these aspects of a type
system is important in any design and implementation of a typed
functional programming language. They allow the programmer to
soundly employ (informal) type-based reasoning, and the compiler
to apply optimisations that assume type-correctness. So naturally,
their verification is a critical part of a verified compiler
A First Complete Algorithm for Real Quantifier Elimination in Isabelle/HOL
We formalize a multivariate quantifier elimination (QE) algorithm in the
theorem prover Isabelle/HOL. Our algorithm is complete, in that it is able to
reduce any quantified formula in the first-order logic of real arithmetic to a
logically equivalent quantifier-free formula. The algorithm we formalize is a
hybrid mixture of Tarski's original QE algorithm and the Ben-Or, Kozen, and
Reif algorithm, and it is the first complete multivariate QE algorithm
formalized in Isabelle/HOL
Verified Propagation Redundancy and Compositional UNSAT Checking in CakeML
Modern SAT solvers can emit independently-checkable proof certificates to validate their results. The state-of-the-art proof system that allows for compact proof certificates is propagation redundancy (PR). However, the only existing method to validate proofs in this system with a formally verified tool requires a transformation to a weaker proof system, which can result in a significant blowup in the size of the proof and increased proof validation time. This article describes the first approach to formally verify PR proofs on a succinct representation. We present (i) a new Linear PR (LPR) proof format, (ii) an extension of the DPR-trim tool to efficiently convert PR proofs into LPR format, and (iii) cake_lpr, a verified LPR proof checker developed in CakeML. We also enhance these tools with (iv) a new compositional proof format designed to enable separate (parallel) proof checking. The LPR format is backwards compatible with the existing LRAT format, but extends LRAT with support for the addition of PR clauses. Moreover, cake_lpr is verified using CakeML ’s binary code extraction toolchain, which yields correctness guarantees for its machine code (binary) implementation. This further distinguishes our clausal proof checker from existing checkers because unverified extraction and compilation tools are removed from its trusted computing base. We experimentally show that: LPR provides efficiency gains over existing proof formats; cake_lpr ’s strong correctness guarantees are obtained without significant sacrifice in its performance; and the compositional proof format enables scalable parallel proof checking for large proofs